home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / libxml2 / libxml / xmlmemory.h < prev    next >
C/C++ Source or Header  |  2006-04-25  |  6KB  |  223 lines

  1. /*
  2.  * Summary: interface for the memory allocator
  3.  * Description: provides interfaces for the memory allocator,
  4.  *              including debugging capabilities.
  5.  *
  6.  * Copy: See Copyright for the status of this software.
  7.  *
  8.  * Author: Daniel Veillard
  9.  */
  10.  
  11.  
  12. #ifndef __DEBUG_MEMORY_ALLOC__
  13. #define __DEBUG_MEMORY_ALLOC__
  14.  
  15. #include <stdio.h>
  16. #include <libxml/xmlversion.h>
  17.  
  18. /**
  19.  * DEBUG_MEMORY:
  20.  *
  21.  * DEBUG_MEMORY replaces the allocator with a collect and debug
  22.  * shell to the libc allocator.
  23.  * DEBUG_MEMORY should only be activated when debugging 
  24.  * libxml i.e. if libxml has been configured with --with-debug-mem too.
  25.  */
  26. /* #define DEBUG_MEMORY_FREED */
  27. /* #define DEBUG_MEMORY_LOCATION */
  28.  
  29. #ifdef DEBUG
  30. #ifndef DEBUG_MEMORY
  31. #define DEBUG_MEMORY
  32. #endif
  33. #endif
  34.  
  35. /**
  36.  * DEBUG_MEMORY_LOCATION:
  37.  *
  38.  * DEBUG_MEMORY_LOCATION should be activated only when debugging 
  39.  * libxml i.e. if libxml has been configured with --with-debug-mem too.
  40.  */
  41. #ifdef DEBUG_MEMORY_LOCATION
  42. #endif
  43.  
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47.  
  48. /*
  49.  * The XML memory wrapper support 4 basic overloadable functions.
  50.  */
  51. /**
  52.  * xmlFreeFunc:
  53.  * @mem: an already allocated block of memory
  54.  *
  55.  * Signature for a free() implementation.
  56.  */
  57. typedef void (XMLCALL *xmlFreeFunc)(void *mem);
  58. /**
  59.  * xmlMallocFunc:
  60.  * @size:  the size requested in bytes
  61.  *
  62.  * Signature for a malloc() implementation.
  63.  *
  64.  * Returns a pointer to the newly allocated block or NULL in case of error.
  65.  */
  66. typedef void *(XMLCALL *xmlMallocFunc)(size_t size);
  67.  
  68. /**
  69.  * xmlReallocFunc:
  70.  * @mem: an already allocated block of memory
  71.  * @size:  the new size requested in bytes
  72.  *
  73.  * Signature for a realloc() implementation.
  74.  *
  75.  * Returns a pointer to the newly reallocated block or NULL in case of error.
  76.  */
  77. typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
  78.  
  79. /**
  80.  * xmlStrdupFunc:
  81.  * @str: a zero terminated string
  82.  *
  83.  * Signature for an strdup() implementation.
  84.  *
  85.  * Returns the copy of the string or NULL in case of error.
  86.  */
  87. typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
  88.  
  89. /*
  90.  * The 4 interfaces used for all memory handling within libxml.
  91. LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
  92. LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
  93. LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
  94. LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
  95. LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup;
  96.  */
  97.  
  98. /*
  99.  * The way to overload the existing functions.
  100.  * The xmlGc function have an extra entry for atomic block
  101.  * allocations useful for garbage collected memory allocators
  102.  */
  103. XMLPUBFUN int XMLCALL
  104.     xmlMemSetup    (xmlFreeFunc freeFunc,
  105.              xmlMallocFunc mallocFunc,
  106.              xmlReallocFunc reallocFunc,
  107.              xmlStrdupFunc strdupFunc);
  108. XMLPUBFUN int XMLCALL     
  109.     xmlMemGet    (xmlFreeFunc *freeFunc,
  110.              xmlMallocFunc *mallocFunc,
  111.              xmlReallocFunc *reallocFunc,
  112.              xmlStrdupFunc *strdupFunc);
  113. XMLPUBFUN int XMLCALL     
  114.     xmlGcMemSetup    (xmlFreeFunc freeFunc,
  115.              xmlMallocFunc mallocFunc,
  116.              xmlMallocFunc mallocAtomicFunc,
  117.              xmlReallocFunc reallocFunc,
  118.              xmlStrdupFunc strdupFunc);
  119. XMLPUBFUN int XMLCALL     
  120.     xmlGcMemGet    (xmlFreeFunc *freeFunc,
  121.              xmlMallocFunc *mallocFunc,
  122.              xmlMallocFunc *mallocAtomicFunc,
  123.              xmlReallocFunc *reallocFunc,
  124.              xmlStrdupFunc *strdupFunc);
  125.  
  126. /*
  127.  * Initialization of the memory layer.
  128.  */
  129. XMLPUBFUN int XMLCALL    
  130.     xmlInitMemory    (void);
  131.  
  132. /* 
  133.  * Cleanup of the memory layer.
  134.  */
  135. XMLPUBFUN void XMLCALL                
  136.                 xmlCleanupMemory        (void);
  137. /*
  138.  * These are specific to the XML debug memory wrapper.
  139.  */
  140. XMLPUBFUN int XMLCALL    
  141.     xmlMemUsed    (void);
  142. XMLPUBFUN int XMLCALL    
  143.     xmlMemBlocks    (void);
  144. XMLPUBFUN void XMLCALL    
  145.     xmlMemDisplay    (FILE *fp);
  146. XMLPUBFUN void XMLCALL    
  147.     xmlMemShow    (FILE *fp, int nr);
  148. XMLPUBFUN void XMLCALL    
  149.     xmlMemoryDump    (void);
  150. XMLPUBFUN void * XMLCALL    
  151.     xmlMemMalloc    (size_t size);
  152. XMLPUBFUN void * XMLCALL    
  153.     xmlMemRealloc    (void *ptr,size_t size);
  154. XMLPUBFUN void XMLCALL    
  155.     xmlMemFree    (void *ptr);
  156. XMLPUBFUN char * XMLCALL    
  157.     xmlMemoryStrdup    (const char *str);
  158. XMLPUBFUN void * XMLCALL  
  159.     xmlMallocLoc    (size_t size, const char *file, int line);
  160. XMLPUBFUN void * XMLCALL    
  161.     xmlReallocLoc    (void *ptr, size_t size, const char *file, int line);
  162. XMLPUBFUN void * XMLCALL    
  163.     xmlMallocAtomicLoc (size_t size, const char *file, int line);
  164. XMLPUBFUN char * XMLCALL    
  165.     xmlMemStrdupLoc    (const char *str, const char *file, int line);
  166.  
  167.  
  168. #ifdef DEBUG_MEMORY_LOCATION
  169. /**
  170.  * xmlMalloc:
  171.  * @size:  number of bytes to allocate
  172.  *
  173.  * Wrapper for the malloc() function used in the XML library.
  174.  *
  175.  * Returns the pointer to the allocated area or NULL in case of error.
  176.  */
  177. #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
  178. /**
  179.  * xmlMallocAtomic:
  180.  * @size:  number of bytes to allocate
  181.  *
  182.  * Wrapper for the malloc() function used in the XML library for allocation
  183.  * of block not containing pointers to other areas.
  184.  *
  185.  * Returns the pointer to the allocated area or NULL in case of error.
  186.  */
  187. #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
  188. /**
  189.  * xmlRealloc:
  190.  * @ptr:  pointer to the existing allocated area
  191.  * @size:  number of bytes to allocate
  192.  *
  193.  * Wrapper for the realloc() function used in the XML library.
  194.  *
  195.  * Returns the pointer to the allocated area or NULL in case of error.
  196.  */
  197. #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
  198. /**
  199.  * xmlMemStrdup:
  200.  * @str:  pointer to the existing string
  201.  *
  202.  * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
  203.  *
  204.  * Returns the pointer to the allocated area or NULL in case of error.
  205.  */
  206. #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
  207.  
  208. #endif /* DEBUG_MEMORY_LOCATION */
  209.  
  210. #ifdef __cplusplus
  211. }
  212. #endif /* __cplusplus */
  213.  
  214. #ifndef __XML_GLOBALS_H
  215. #ifndef __XML_THREADS_H__
  216. #include <libxml/threads.h>
  217. #include <libxml/globals.h>
  218. #endif
  219. #endif
  220.  
  221. #endif  /* __DEBUG_MEMORY_ALLOC__ */
  222.  
  223.